﻿#ifndef XQHTTPREQUESTOBJECT_H
#define XQHTTPREQUESTOBJECT_H
#include"XQHead.h"
#include<QObject>
#include"XSymbolOverload.h"
#include"XQHttpHeadReply.h"
#include"XQLogDebug.h"
class XQHttpRequestObject:public QObject,public XQLogDebug
{
	Q_OBJECT
public:
	XQHttpRequestObject(QObject* parent = nullptr);
	virtual ~XQHttpRequestObject();
	//当前名字-没有直接使用
	QString name()const;
	XQHttpClient* http()const;
	//返回当前是否连接到服务器
	bool isConnected()const;
public:
	virtual void setName(const QString& name);
	//绑定外部名字使用     nullptr重新绑定回内部的
	virtual void bindName(QString* name);
	virtual void setHttp(XQHttpClient* http);
	void connectToServer(const QString& url);
	//连接到服务器并等待
	bool connectToServerWait(const QString& url, int msecs = 3_s);
signals://信号
	//连接上服务器
	void connected();
	//与服务器断开连接
	void disconnected();
protected:
	virtual void init();
	virtual void httpClient_init();
	//发送数据前处理
	virtual void send(const QByteArray& data);
protected slots:
	//响应处理
	virtual void replyRead(const XQHttpHeadReply& head)=0;
protected:
	XQHttpClient* m_http = nullptr;
	QString m_name;//名称
	QString* m_pName=&m_name;//绑定名称
};
#endif // !XQHttpRequestObject_H
